<?php

/**
 * API ADMINISTRATOR
 * 
 * Api administrator
 * 
 * @package API
 * @subpackage Controllers
 * @author Carlos Carvalho
 */
class Api extends REST_Controller {

    private $create_thumb = false;
    private $create_small = false;
    private $image_small_ratio = TRUE;
    private $watermark = false;
    private $path_images = 'public/images/';

    function __construct() {
        parent::__construct();

        $this->load->model(array(
            'leiloes/Leilao_Model',
            'Condicoes_Vendas_M',
            'Users_M',
            'Comitentes_M',
            'Logradouros_M',
            'Estados_M',
            'Lotes_M',
            'Cidades_M',
            'Categories_M',
            'Tipos_Ativos_M',
            'Arrematantes_M',
            'Banners_M',
            'Boletos_M',
            'Bancos_M',
            'Contas_M',
            'Lances_M',
            'Lances_Arrematados_M',
            'Taxas_M',
            'Pagamentos_M',
            'Newsletter_M',
            'Habilitacoes_M', 'Lances_Pagamentos_M',
            'Lances_Propostas_M',
            'Messages_Privates_M',
            'Leiloeiros_M'
        ));
        $this->load->library(array('User_Manager', 'tpl_mail_send'));
    }
    /**
     * _users online
     * 
     * @return string json data
     * 
     */
    function _users_online() {
        return $this->users_online->total_users();
    }
    /**
     * condicoes
     * 
     * show all condicoes 
     * 
     * 
     * @example path/condicoes access via url 
     * @return string json data
     */
    function condicoes_get() {
        $cnd = $this->db->get('condicoes_pagamentos');
        if ($cnd->num_rows() > 0) {
            echo json_encode($cnd->result());
            return;
        }
        $this->response(NULL, 400);
    }
    /**
     * leiloes_get 
     * 
     * get all leiloes in data base
     * 
     * @param int $id
     * @return string json data
     */
    function leiloes_get($id = null) {


        $cnd = $this->Leilao_Model->get($id);
        if ($cnd) {
            if (!is_null($id)) {
                $cnd->INFO = $this->leilao_info_get($id);
            }
            $this->response($cnd, 200);
            return;
        }
        $this->response(null, 200);
    }
    
    /**
     * 
     */
    function all_leiloeiros_system_get() {
        $this->response(array());
    }
   
    /**
     * leilaoFullInfo_get
     * 
     * Get all info leilões 
     * 
     * @param int $id
     * @return json data
     */
    function leilaoFullInfo_get($id) {
        $rw = $this->Leilao_Model->fullInfo($id);
        if ($rw) {
           return $this->response($rw, 200);
        }

        return $this->response('Dados nao encontrados', 200);
    }

    function categories_get($id = null) {
        $d = $this->Categories_M->get($id);
        if ($d) {
            $this->response($d, 200);
        }
        $this->response(array(), 200);
    }

    function categories_estados_get($id = null) {
        $this->response(array('categories' => $this->Categories_M->get(),
            'estados' => $this->Estados_M->get(),
            'NEXT_LOTE' => $this->Lotes_M->last_num($id)
                ), 200);
    }

    function categories_estados_subcategories_cidades_get() {
        header('content-type:application/json;');
        echo json_encode(array('categories' => $this->Categories_M->get(),
            'estados' => $this->Estados_M->get(),
            'subcategories' => $this->Tipos_Ativos_M->get(),
            'cidades' => $this->Cidades_M->get()
        ));
    }

    function categories_post() {
        $post = $this->prepare_post_array(array('SLUG' => array('callback' => 'to_url_friend', 'params' => $this->post('NAME')), 'NAME', 'ORDER'));
        $this->response($this->Categories_M->save($post), 200);
    }

    function categories_delete($id) {
        $del = $this->Categories_M->delete($id);
        if ($del) {
            $this->response(array('message' => Utils::message('delete_success')), 200);
        }
        $this->response(array('message' => Utils::message('delete_fail')), 400);
    }

    function categories_put($id) {
        $post = $this->prepare_put_array(array('SLUG' => array('callback' => 'to_url_friend', 'params' => $this->put('NAME')), 'NAME', 'ORDER'));
        $this->Categories_M->save($post, $id);
        $this->response($post, 200);
    }

    function subcategories_get($id = null) {
        $this->response($this->Tipos_Ativos_M->get_with_categorie($id), 200);
    }

    function subcategories_post() {
        $post = $this->prepare_post_array(array('SLUG' => array('callback' => 'to_url_friend', 'params' => $this->post('NAME')), 'NAME', 'CATEGORIA_ID'));
        $this->Tipos_Ativos_M->save($post);
        $this->response($post, 200);
    }

    function subcategories_put($id) {
        $post = $this->prepare_put_array(array('SLUG' => array('callback' => 'to_url_friend', 'params' => $this->put('NAME')), 'NAME', 'CATEGORIA_ID'));

        $this->Tipos_Ativos_M->save($post, $id);
        $this->response($post, 200);
    }

    function subcategories_delete($id) {
        $del = $this->Tipos_Ativos_M->delete($id);
        if ($del) {
            $this->response(array('message' => Utils::message('delete_success')), 200);
        }
        $this->response(array('message' => Utils::message('delete_fail')), 400);
    }

    function tipoAtivos_get($id) {
        $this->response($this->Tipos_Ativos_M->get_by(array(
                    'CATEGORIA_ID' => $id
                )), 200);
    }

    function leiloes_post() {


        $data = auto_format_data($this->post('_DATA')) . ' ' . mask_hour($this->post('HORA'));


        if (strtotime($data) > strtotime('now')) {




            $cnd = $this->Leilao_Model->save(array(
                'TITLE' => $this->post('TITLE'),
                'COMITENTE_ID' => $this->post('COMITENTE_ID'),
                'STATUS' => $this->post('STATUS'),
                'IMAGEM' => $this->post('IMAGEM'),
                'DESCRICAO' => $this->post('DESCRICAO'),
                'LEILOEIRO_ID' => $this->post('LEILOEIRO_ID') === FALSE ? NULL : $this->post('LEILOEIRO_ID'),
                'CONDICAO_VENDA_ID' => $this->post('CONDICAO_VENDA_ID'),
                'DATA' => $data
            ));



            if ($cnd) {
                $this->response(array('rsp' => $data), 200);
                return;
            }
            $this->response(array('message' => lang_system('save_fail')), 400);
            return;
        }

        $this->response(array('message' => lang_system('date_leilao_minus')), 400);
    }

    function leiloes_put() {
        $id = $this->put('ID');
        $_put = array(
            'TITLE',
            'COMITENTE_ID',
            'STATUS',
            'TIPO',
            'IMAGEM',
            'DESCRICAO',
            'PRESTACAO_CONTAS', 'CONDICAO_VENDA_ID'
        );

        $data = $this->prepare_put_array($_put);
        $data['LEILOEIRO_ID'] = $this->put('LEILOEIRO_ID') === FALSE ? NUll : $this->put('LEILOEIRO_ID');
        if ($this->put('_DATA')) {
            $le = $this->Leilao_Model->data($id);
            $data['_DATA'] = auto_format_data($this->put('_DATA'), '/');
            $data['DATA'] = $data['_DATA'] . ' ' . mask_hour($this->put('HORA'));
            if ($le->DATA != $data['DATA']) {
                $this->_update_fechamento_lotes($id, $data['_DATA']);
            }

            unset($data['_DATA']);
        }
        //
        if ($this->put('CREATE_NEW_LEILAO') == 'S') {
            $this->_create_leilao($id);
        }
        $cnd = $this->Leilao_Model->save($data, $id);
        if ($cnd) {
            $this->response(array('message' => lang_system('update_success')), 200);
            return;
        }
        $this->response(array('message' => lang_system('update_fail')), 400);
    }

    function leilao_info_get($id = null) {
        if (is_null($id)) {
            return array();
        }
        return $this->Leilao_Model->info_statistics($id);
    }

    function _create_leilao($id) {
        $le = (array) $this->Leilao_Model->data($id);
        unset($le['ID']);
        $le['DATA'] = date('Y-m-d H:i:s');
        $le['STATUS'] = 3;
        $lid = $this->Leilao_Model->save($le);
        if ($lid) {

            $lotes = $this->Lotes_M->not_seller($id);
            $batch = array();
            foreach ($lotes as $key => $value) {
                $row = (array) $value;
                unset($row['ID']);
                $min = ($key + 1) * config_item('time_new_lote');
                $row['ABERTURA'] = date('Y-m-d H:i:s', strtotime('+' . $min . ' minutes'));
                $row['FECHAMENTO'] = date('Y-m-d H:i:s', strtotime('+' . $min . ' minutes'));
                $row['LEILAO_ID'] = $lid;

                if ($this->put('PRESERVE_NUM_LOTES') == 'N') {
                    $row['NUM_LOTE'] = str_num_lote_pad(($key + 1));
                }
                $batch[] = $row;
            }

            $this->Lotes_M->save_batch($batch);
        }
    }

    function _update_fechamento_lotes($lid, $_date) {
        $lotes = $this->Lotes_M->get_by(array('LEILAO_ID' => $lid));
        if ($lotes) {
            $batch = array();
            foreach ($lotes as $row) {
                $row->FECHAMENTO = $_date . ' ' . extract_time($row->FECHAMENTO);
                $row->ABERTURA = $_date . ' ' . extract_time($row->FECHAMENTO);
                $batch[] = (array) $row;
            }
            $this->Lotes_M->update_batch($batch);
        }
    }

    function leiloes_delete($id) {
        $del = $this->Leilao_Model->delete($id);

        if ($del) {

            $this->Lotes_M->delete_all_leilao($id);
            $this->Habilitacoes_M->delete_all_leilao($id);
            $this->Lances_M->delete_all_leilao($id);
            $this->response($del, 200);
            return;
        }
        $this->response(NULL, 400);
    }

    function comitentes_get($id = null) {
        $data = $this->Comitentes_M->get($id);

        if ($data) {
            $this->response($data, 200);
            return;
        }
    }

    function comitentes_post() {
        $data = $this->prepare_post_array(array(
            'RAZAO',
            'LOGO',
            'LOGRADOURO',
            'NUMERO',
            'COMPLEMENTO',
            'NOME_FANTASIA',
            'BAIRRO',
            'CIDADE',
            'UF',
            'FONE_FAX' => array(
                'callback' => 'clear_number'
            ),
            'EMAIL',
            'OBSERVACAO',
            'RESPONSAVEL',
            'REPRESENTANTE',
            'CNPJ' => array(
                'callback' => 'clear_number'
            ),
            'CPF_REPRESENTANTE' => array(
                'callback' => 'clear_number'
            ),
            'TELEFONE' => array(
                'callback' => 'clear_number'
            ),
            'CELULAR' => array(
                'callback' => 'clear_number'
            ),
            'CEP' => array(
                'callback' => 'clear_number'
            )
        ));
        $saved = $this->Comitentes_M->save($data);
        if ($saved) :
            $this->response($saved, 200);



        endif;
        $this->response(array(
            'error' => 'Dados nao gravado'
                ), 400);
    }

    function comitentes_put() {
        $data = $this->prepare_put_array(array(
            'RAZAO',
            'LOGO',
            'LOGRADOURO',
            'NUMERO',
            'COMPLEMENTO',
            'NOME_FANTASIA',
            'BAIRRO',
            'CIDADE',
            'UF',
            'FONE_FAX',
            'OBSERVACAO',
            'RESPONSAVEL',
            'EMAIL',
            'REPRESENTANTE',
            'CNPJ' => array(
                'callback' => 'clear_number'
            ),
            'CPF_REPRESENTANTE' => array(
                'callback' => 'clear_number'
            ),
            'TELEFONE' => array(
                'callback' => 'clear_number'
            ),
            'CELULAR' => array(
                'callback' => 'clear_number'
            ),
            'CEP' => array(
                'callback' => 'clear_number'
            )
        ));
        $saved = $this->Comitentes_M->save($data, $this->put('ID'));
        if ($saved) :
            $this->response($saved, 200);



        endif;
        $this->response(array(
            'error' => 'Dados nao gravado'
                ), 400);
    }

    function comitentes_delete($id) {
        $del = $this->Comitentes_M->delete($id);
        if ($del) {
            $this->response($del, 200);
            return;
        }
        $this->response(NULL, 400);
    }

    function comitentesUploadMultiple_post() {
        $this->load->library('csvreader');
        $file = array_values($_FILES);
        $file = $file ['0'];
        $ext = pathinfo($file ['name'], PATHINFO_EXTENSION);

        if (!in_array($ext, array(
                    'csv',
                    'txt'
                ))) {
            $this->response(array(
                'message' => 'Tipo de arquivo não permitido'
                    ), 400);
        }
        $apply = array(
            'CNPJ' => 'clear_number',
            'TELEFONE_RECADO' => 'clear_number',
            'TELEFONE' => 'clear_number',
            'CEP' => 'clear_number',
            'CELULAR' => 'clear_number',
            'RAZAO' => 'trim'
        );
        $data = $this->csvreader->parse_to_db($file ['tmp_name'], array(
            'strtoupper'
                ), $apply);
        $save = $this->Comitentes_M->save($data, null, true);
        if ($save) {
            $this->response(array(
                'message' => Utils::message('import_success')
                    ), 200);
            return;
        }
        ;

        $this->response(array(
            'message' => Utils::message('import_fail') . $this->Comitentes_M->get_log_errors('number', true)
                ), 400);
    }

    /* Arrematantes Get */

    function arrematantes_get($id = null) {


        $where = 'g.ID NOT IN (2,3)';
        $row = false;
        if (!is_null($id)) {
            $row = true;
            $where .=' AND u.ID=' . $id;
        }

        $data = $this->user_manager->get_where($where, $row);



        if ($data) {
            $this->response($data, 200);
            return;
        }
        $this->response(array(), 200);
    }

    function arrematantes_post() {
        $post_array = array(
            'NOME',
            'EMAIL',
            'PROFISSAO',
            'NOME_FANTASIA',
            'TIPO',
            'RG_IE',
            'NUMERO',
            'LOGRADOURO',
            'BAIRRO',
            'COMPLEMENTO',
            'CIDADE',
            'UF',
            'SEXO',
            'NASCIMENTO',
            'EMAIL_ALTERNATIVO',
            'LOGIN',
            'PWD',
            'CONTATO',
            'ESTADO_CIVIL',
            'INTERESSES',
            'NOME_MAE',
            'CNH' => array(
                'callback' => 'clear_number'
            ),
            'CPF_CONTATO' => array(
                'callback' => 'clear_number'
            ),
            'RG_CONTATO' => array(
                'callback' => 'clear_number'
            ),
            'TELEFONE_CONTATO' => array(
                'callback' => 'clear_number'
            ),
            'TELEFONE' => array(
                'callback' => 'clear_number'
            ),
            'TELEFONE_2' => array(
                'callback' => 'clear_number'
            ),
            'CEP' => array(
                'callback' => 'clear_number'
            ),
            'CPF_CNPJ' => array(
                'callback' => 'clear_number'
            )
        );
        $data = $this->prepare_post_array($post_array);

        $is_save = $this->user_manager->register($data);

        if ($data) {
            if ($is_save) {
                $this->response($data, 200);
                return;
            }
            $this->response(array(
                'message' => Utils::message('save_fail') . $this->user_manager->get_errors()
                    ), 400);
            return;
        }
        $this->response(null, 200);
    }

    function arrematantes_put($id) {
        $put_array = array(
            'NOME',
            'EMAIL',
            'PROFISSAO',
            'NOME_FANTASIA',
            'TIPO',
            'RG_IE',
            'NUMERO',
            'LOGRADOURO',
            'BAIRRO',
            'COMPLEMENTO',
            'CIDADE',
            'UF',
            'SEXO',
            'NASCIMENTO',
            'EMAIL_ALTERNATIVO',
            'CONTATO',
            'ESTADO_CIVIL',
            'INTERESSES',
            'NOME_MAE',
            'LOGIN',
            'PWD',
            'CNH' => array(
                'callback' => 'clear_number'
            ),
            'CPF_CONTATO' => array(
                'callback' => 'clear_number'
            ),
            'RG_CONTATO' => array(
                'callback' => 'clear_number'
            ),
            'TELEFONE_CONTATO' => array(
                'callback' => 'clear_number'
            ),
            'TELEFONE' => array(
                'callback' => 'clear_number'
            ),
            'TELEFONE_2' => array(
                'callback' => 'clear_number'
            ),
            'CEP' => array(
                'callback' => 'clear_number'
            ),
            'CPF_CNPJ' => array(
                'callback' => 'clear_number'
            )
        );

        $data = $this->prepare_put_array($put_array);
        $is_save = $this->user_manager->update($data, $id);

        if ($data) {
            if ($is_save) {
                $this->response($data, 200);
                return;
            }
            $this->response(array(
                'id' => $this->put('id'),
                'data' => $data,
                'message' => Utils::message('update_fail' . $this->user_manager->get_errors())
                    ), 400);
            return;
        }
        $this->response(null, 200);
    }

    function arrematantes_delete($id) {
        $is_delete = $this->user_manager->unregister($id);

        if ($is_delete) {
            $this->response($is_delete, 200);
            return;
        }
        $this->response(array(
            'message' => Utils::message('save_fail') . $this->user_manager->get_errors()
                ), 400);
    }

    function banners_get($id = null) {
        $this->load->model('Banners_M');
        $data = $this->Banners_M->get($id);

        if ($data) {

            if (!is_null($id)) {
                $this->response(array(
                    $data
                        ), 200);
                return;
            }
            $this->response($data, 200);
            return;
        }

        $this->response(array(), 200);
    }

    function proposta_post() {
        $id = $this->post('id');
        $proposta = $this->post('proposta');

        $lance = $this->Lances_Arrematados_M->by_lance($this->post('lance'));
        if ($lance) {
            $data = array('USER_ID' => $lance->USER_ID,
                'LOTE_ID' => $lance->LOTE_ID,
                'LEILAO_ID' => $lance->LEILAO_ID,
                'VALOR' => format_money_db($proposta),
                'CREATE' => date('Y-m-d H:i:s')
            );
            $id = $this->Lances_Propostas_M->save($data);

            if ($id) {
                // $this->response(array('message'=>  lang_system('admin_proposta_success') ,'data'=>$data));
                $message = sprintf(lang_system('admin_message_new_proposta'), str_num_lote_pad($lance->NUM_LOTE) . '-' . $lance->DESCRICAO, $lance->NOME_FANTASIA, $proposta, site_url('aprouve-proposta-' . $id . '.html'), site_url('reject-proposta-' . $id . '.html'));

                $str_proposta = sprintf(lang_system('admin_new_proposta_user'), str_num_lote_pad($lance->NUM_LOTE));

                $mp_data = array('MESSAGE' => $message,
                    'TITLE' => $str_proposta,
                    'USER_ID' => $lance->USER_ID,
                    'CREATE' => strtotime('now'),
                    'RECIPIENT' => $lance->LOGIN,
                    'SENDING' => lang_system('admin_sending_mp'));
                $iid = $this->Messages_Privates_M->save($mp_data);

                if ($iid) {
                    $this->response(array('message' => lang_system('admin_proposta_success')));
                    return;
                }
            }
        }
        $this->response(array('message' => lang_system('admin_proposta_fail')), 400);
    }

    private function generateKeyActivation($login) {
        return Utils::generateKeyActivation($login);
    }

    function lotesUploadMultiple_post() {
        $this->load->library('csvreader');
        $file = array_values($_FILES);
        $file = $file ['0'];
        $ext = pathinfo($file ['name'], PATHINFO_EXTENSION);

        if (!in_array($ext, array(
                    'csv',
                    'txt'
                ))) {
            $this->response(array(
                'message' => Utils::message('extension_not_allowed')
                    ), 400);
        }
        $apply = array(
            'NUM_LOTE' => 'str_num_lote_pad',
            'VALOR_MINIMO' => 'money_db',
            'INCREMENTO' => 'money_db',
            'LANCE_INICIAL' => 'money_db',
            'CIDADE' => 'get_id_city'
        );
        $data = $this->csvreader->parse_to_db($file ['tmp_name'], array(
            'strtoupper',
            'trim'
                ), $apply);
        $save = false;

        $has_leilao = $this->Leilao_Model->get($this->post('LEILAO_ID'), true);
        if ($has_leilao)
            if (count($data) > 0) {
                $newData = array();
                foreach ($data as $i => $line) :
                    $row = $line;
                    $row ['LEILAO_ID'] = $this->post('LEILAO_ID');
                    $row ['COMITENTE_ID'] = $this->post('COMITENTE_ID');
                    $minutes = config_item('time_new_lote') * ($i + 1);
                    $row ['ABERTURA'] = date('Y-m-d H:i:s', strtotime(' + ' . $minutes . ' minutes', strtotime($has_leilao->DATA)));
                    $row ['FECHAMENTO'] = date('Y-m-d H:i:s', strtotime(' + ' . $minutes . ' minutes', strtotime($has_leilao->DATA)));
                    $newData [] = $row;
                endforeach;

                // / $this->response(array('dataResult'=>$newData,'message'=> Utils::message('import_success')),200);
                $save = $this->Lotes_M->save($newData, null, true);


                // $this->response($newData,200);
            }

        //

        if ($save) {
            $this->response(array(
                'message' => Utils::message('import_success')
                    ), 200);
            return;
        }
        ;

        $this->response(array(
            'message' => Utils::message('import_fail') . $this->Lotes_M->get_log_errors(null, true)
                ), 400);
    }

    function logradouro_get($cep = null) {
        $cep = is_null($cep) ? $this->get('CEP') : $cep;
        $log = $this->Logradouros_M->getLogradouro($cep);
        $this->response($log);
    }

    function uploadFileByLeilao_post() {
        $this->folder_img = 'leiloes/';
        $this->resize = true;
        $this->image_width = 155;
        $this->image_height = 155;
        $this->response($this->save_upload(array('small' => false,'quality'=>100, 'thumbnail' => false, 'image_w' => 155, 'image_h' => 80)), 200);
    }

    function remove_post() {
        $file = $this->folder_img = 'leiloes/' . $this->post('ID');
        $rm = $this->remove_file_upload($file);
        if ($rm ['success']) {
            $this->Leilao_Model->save(array(
                'IMAGEM' => ''
                    ), $this->post('LEILAO'));
            $this->response($rm, 200);
        } else if ($rm ['success'] == false) {
            $this->response($rm, 400);
        }
    }

    function fileSeller_post() {
        $this->folder_img = 'comitentes/';
        $this->resize = true;
        $up = $this->save_upload(array('small' => false, 'thumbnail' => false, 'image_w' => 155, 'image_h' => 80));
        if ($up['error'] == false) {
            $this->response($up, 200);
        }
        $this->response(array('message' => $up['message']), 500);

        //$this->response($this->save_upload(), 200);
    }

    function removeFileSeller_post() {
        $file = $this->folder_img = 'comitentes/' . $this->post('ID');
        $rm = $this->remove_file_upload($file);
        $id = $this->post('COMITENTE');
        if ($rm ['success']) {
            if ($id) {
                $this->Comitentes_M->save(array(
                    'LOGO' => ''
                        ), $id);
            }
            $this->response($rm, 200);
        } else if ($rm ['success'] == false) {
            $this->response($rm, 400);
        }
    }

    function uploadImageLote_post() {
        $this->folder_img = 'lotes/';
        $this->watermark = true;

        $save = $this->save_upload();
        if ($save['error'] == false):
            $this->response($save, 200);
        endif;
        $this->response($save, 400);
    }

    function removeImageLote_post() {
        $file = $this->folder_img = 'lotes/' . $this->post('ID');
        $rm = $this->remove_file_upload($file);
        $row = $this->Lotes_M->get($this->post('LOTE'), TRUE);
        $images = preg_split('#,#', $row->IMAGENS);
        $s = array_search($this->post('ID'), $images);
        //echo $s;
        $in = $images[$s];
        unset($images[$s]);
        $u_images = implode(',', $images);

        //$this->response(array('images'=>$u_images,'search'=>$s,'in'=>$in), 400);
        $this->Lotes_M->save(array('IMAGENS' => $u_images), $this->post('LOTE'));
        //exit;
        if ($s !== FALSE):
            //if(preg_match('#()#', $subject))
            if ($rm['success']):
                $this->response($rm, 200);
            endif;
            $this->response($rm, 400);
        endif;
        $this->response(array('message' => lang_system('image_has_removed'), 'files' => $this->post('ID')), 400);
    }

    /*
     * Banners upload api
     */

    function banners_post() {
        $data = $this->prepare_post_array(array(
            'TITLE',
            'LINK',
            'IMAGE'
        ));
        $s = $this->Banners_M->save($data);

        if ($s) {
            $this->response(array(
                'message' => Utils::message('save_success')
                    ), 200);
        }

        $this->response(array(
            'message' => Utils::message('save_fail')
                ), 400);
    }

    function banners_put() {
        $data = $this->prepare_put_array(array(
            'TITLE',
            'LINK',
            'IMAGE'
        ));
        $s = $this->Banners_M->save($data, $this->put('ID'));

        if ($s) {
            $this->response(array(
                'message' => Utils::message('update_success')
                    ), 200);
        }

        $this->response(array(
            'message' => Utils::message('update_fail')
                ), 400);
    }

    function update_status_banners_put() {
        $data = $this->prepare_put_array(array(
            'ACTIVATE'
        ));


        $s = $this->Banners_M->save($data, $this->put('ID'));

        if ($s) {
            $this->response(array(
                'message' => Utils::message('update_success')
                    ), 200);
        }

        $this->response(array(
            'message' => Utils::message('update_fail')
                ), 400);
    }

    function banners_delete($id) {
        $banner = $this->Banners_M->get($id);

        $delete = $this->Banners_M->delete($id);

        if ($delete) {

            $this->on_delete_banner_post($banner->IMAGE);

            $this->response(array(
                'message' => Utils::message('delete_success')
                    ), 200);
        }

        $this->response(array(
            'message' => Utils::message('delete_fail')
                ), 400);
    }

    function fileBanner_post() {
        $this->folder_img = 'banners/';
        $file = array_values($_FILES);
        $fileupload = $file ['0'];
        unset($_FILES);
        $_FILES['uploadFile'] = $fileupload;
        $save = $this->save_upload(array('thumbnail' => false, 'small' => false, 'resize' => false, 'image_crop' => false));
        if ($save['error'] == false):
            $this->response(array('files' => $save['files']));

        endif;
        $this->response(array('message' => $save['message'], 'files' => array()), 400);
    }

    function on_delete_banner_post($_file = null) {
        $this->folder_img = 'banners/';
        $file = $this->post('ID');
        if (!is_null($_file)) {
            $file = $_file;
        }
        $file = $this->folder_img = 'banners/' . $file;
        $rm = $this->remove_file_upload($file);
        $this->response($rm, 200);
    }

    /*
     * method lote_get @param (int) $id codigo do lote que dever ser enviado para a api return json data
     */

    function lotes_get($id = null) {
        $g = $this->Lotes_M->get_by(array(
            'LEILAO_ID' => $this->get('byLeilao')
        ));
        if (!$g) {
            $this->response(array(), 200);
        }
        $this->response($g, 200);
    }

    function lotesClosed_get($id) {
        $this->response($this->Leilao_Model->get_info_close($id), 200);
    }

    function loteSettings_get($id = null) {
        $this->response($this->Lotes_M->fullInfo($id), 200);
    }

    function user_proposta_post() {

        $aprouve = $this->post('aprouve');
        $id = $this->post('id');
        $pro = $this->Lances_Propostas_M->get($id, true);
        $resp = array('message' => lang_system('admin_aprouve_user_fail_operation'));
        //aprouve proposta user
        if ($aprouve == 'S' && $pro) {
            $data = $this->Users_M->all_info($pro->USER_ID);
            //(object) array_merge((array) $data, (array) $pro)
            $this->_save_on_user_lance((object) array_merge((array) $data, (array) $pro));
            $this->_add_on_seller_lote($pro);
            $this->_save_on_proposta($id, 'S');

            $data->MESSAGE = sprintf(lang_system('admin_aprouve_user_proposta'), $pro->LOTE_ID, number_format($pro->VALOR, 2, ',', '.'));
            $this->_send_mail_user('Parabéns sua proposta foi aprovada.', $data, $data->EMAIL, 'proposta');
        } else {
            $this->_save_on_proposta($id);
        }

        $this->response($resp, 400);
    }

    function _send_mail_user($subject, $data, $email, $template, $mailsending = 'noreply') {
        $_mail = $this->tpl_mail_send;
        $_mail->data($data);
        $_mail->to($email);
        $_mail->subject($subject);
        if ($_mail->send($mailsending, $template)) {
            $resp['message'] = lang_system('admin_sendmail_user_proposta');
            $this->response($resp);
        }
    }

    function _add_on_seller_lote($obj) {


        $row = $this->Lances_M->info_lote($obj->LOTE_ID, $obj->LEILAO_ID);
        //
        $data_insert = array(
            'LOTE_ID' => $row->LOTE_ID,
            'LEILAO_ID' => $row->LEILAO_ID,
            'USER_ID' => $row->USER_ID,
            'TOTAL' => $row->TOTAL,
            'LANCE_ID' => $row->ID,
            'DATAHORA' => date('Y-m-d H:i:s'),
            'CONDICIONAL' => 'N',
            'VENDIDO' => 'S'
        );
        $this->Lances_Arrematados_M->save($data_insert);
    }

    function _save_on_user_lance($obj) {
        $user = new stdClass();
        $user->tipo = 'P'; //proposta
        $user->valor = $obj->VALOR;
        $user->login = $obj->LOGIN;
        $user->id = $obj->USER_ID;


        return $this->Lances_M->add($obj->LOTE_ID, $user);
    }

    function _save_on_proposta($id, $aprouve = 'N') {
        if ($aprouve == 'S') {
            $this->Lances_Propostas_M->save(array('APROUVE' => 1), $id);
        } else {
            //status 4 on delete
            $this->Lances_Propostas_M->save(array('APROUVE' => 4), $id);
        }
    }

    function comprovantes_get($number) {

        echo add_image('comprovantes/' . $number, 'width="100%"');
    }

    function nfe_put() {


        $row = $this->Lances_Pagamentos_M->save(array('NFE_LIBERADO' => 'S', 'FECHADO' => 'S'), $this->put('id'));

        if ($row) {

            $this->response(array('message' => lang_system('admin_nfe_enabled')));
        }

        $this->response(array('message' => lang_system('admin_nfe_not_enabled')), 400);
    }

    function lote_post() {
        $data = array(
            'LEILAO_ID',
            'NUM_LOTE',
            'TIPO_ID',
            'INFO',
            'FECHAMENTO' => array(
                'callback' => 'mask_hour'
            ),
            'TAGS',
            'RETIRADO',
            'DESCRICAO_DETALHADA',
            'DESCRICAO',
            'INFO',
            'INFO_VISITACAO',
            'INFO_RETIRADA',
            'CIDADE' => array(
                'callback' => 'intval'
            ),
            'COMISSAO' => array(
                'callback' => 'intval'
            ),
            'LANCE_INICIAL' => array(
                'callback' => 'money_db'
            ),
            'VALOR_MINIMO' => array(
                'callback' => 'money_db'
            ),
            'INCREMENTO' => array(
                'callback' => 'money_db'
            )
        );
        $prepare = $this->prepare_post_array($data);
        $prepare['IMAGENS'] = $this->post('IMAGENS');
        $le = $this->Leilao_Model->get($prepare['LEILAO_ID'], TRUE);
        $prepare ['FECHAMENTO'] = auto_format_data(extract_data($le->DATA)) . ' ' . $prepare ['FECHAMENTO'];
        $prepare ['ABERTURA'] = $prepare ['FECHAMENTO'];
        $this->response($this->Lotes_M->save($prepare), 200);
    }

    function lote_on_close_put($id) {

        $upd = $this->Lances_Arrematados_M->save($this->prepare_put_array(array('VENDIDO', 'FECHADO')), $id);

        if ($upd) {
            $this->response(array('message' => Utils::message('update_success')), 200);
        }
        $this->response(array('message' => Utils::message('update_fail')), 400);
    }

    function lote_put($id) {
        $data = array(
            'LEILAO_ID',
            'NUM_LOTE',
            'TIPO_ID',
            'INFO',
            'FECHAMENTO',
            'TAGS',
            'IMAGENS',
            'DESCRICAO_DETALHADA',
            'DESCRICAO',
            'INFO',
            'INFO_VISITACAO',
            'INFO_RETIRADA',
            'RETIRADO',
            'CIDADE' => array(
                'callback' => 'intval'
            ),
            'COMISSAO' => array(
                'callback' => 'intval'
            ),
            'LANCE_INICIAL' => array(
                'callback' => 'money_db'
            ),
            'VALOR_MINIMO' => array(
                'callback' => 'money_db'
            ),
            'INCREMENTO' => array(
                'callback' => 'money_db'
            )
        );
        $prepare = $this->prepare_put_array($data);

        $prepare ['FECHAMENTO'] = replace_hour($this->put('DATA'), mask_hour($prepare ['FECHAMENTO']));

        $update = $this->Lotes_M->save($prepare, $id);
        if ($update) {
            $this->response(array('message' => lang_system('update_success')), 200);
        }
        $this->response(array('message' => lang_system('update_fail')), 400);
    }

    function lotes_delete($id) {
        $this->response($this->Lotes_M->delete($id), 200);
    }

    function estados_get() {
        $this->response($this->Estados_M->get(), 200);
    }

    function cidades_get($id) {
        header('content-type:application/json;');

        echo json_encode($this->Cidades_M->get_by(array(
                    'ESTADO' => $id
        )));
    }

    function all_users_system_get() {
        $data = $this->Arrematantes_M->get();
        $this->response($data, 200);
    }

    function users_get($id = null) {
        $where = 'g.ID IN (2,3)';
        $row = false;
        if (!is_null($id)) {
            $where .=' AND u.ID=' . $id;
            $row = true;
        }
        $this->response($this->user_manager->get_where($where, $row), 200);
        return;
    }

    function users_post() {
        if (!Utils::checkValidUserName($this->post('LOGIN'))) {
            $this->response(array(
                'message' => Utils::message('username_no_allowed')
                    ), 400);
        }

        $data = $this->prepare_post_array(array(
            'LOGIN',
            'PWD',
            'NOME',
            'PROFISSAO',
            'LOGRADOURO',
            'NUMERO',
            'BAIRRO',
            'CIDADE',
            'UF',
            'CEP',
            'TELEFONE' => array(
                'callback' => 'clear_number'
            ),
            'TELEFONE_2' => array(
                'callback' => 'clear_number'
            ),
            'CELULAR' => array(
                'callback' => 'clear_number'
            ),
            'EMAIL',
            'EMAIL_ALTERNATIVO',
            'CPF_CNPJ' => array(
                'callback' => 'clear_number'
            ),
            'RG_IE',
            'ESTADO_CIVIL'
        ));

        $in = $this->user_manager->register($data, 2);

        if ($in) {
            $this->response($in, 200);
        } else {

            if (count($this->user_manager->get_errors()) > 0) {
                $this->response(array(
                    'message' => $this->user_manager->get_errors()
                        ), 400);
                return;
            }
            $this->response(array(
                'message' => 'Houve um erro no banco de dados'
                    ), 400);
            return;
        }
    }

    function users_put($id) {
        $put_array = array(
            'NOME',
            'EMAIL',
            'PROFISSAO',
            'NOME_FANTASIA',
            'TIPO',
            'RG_IE',
            'NUMERO',
            'LOGRADOURO',
            'BAIRRO',
            'COMPLEMENTO',
            'CIDADE',
            'UF',
            'SEXO',
            'NASCIMENTO',
            'EMAIL_ALTERNATIVO',
            'CONTATO',
            'ESTADO_CIVIL',
            'INTERESSES',
            'NOME_MAE',
            'LOGIN',
            'PWD',
            'CNH' => array(
                'callback' => 'clear_number'
            ),
            'CPF_CONTATO' => array(
                'callback' => 'clear_number'
            ),
            'RG_CONTATO' => array(
                'callback' => 'clear_number'
            ),
            'TELEFONE_CONTATO' => array(
                'callback' => 'clear_number'
            ),
            'TELEFONE' => array(
                'callback' => 'clear_number'
            ),
            'TELEFONE_2' => array(
                'callback' => 'clear_number'
            ),
            'CEP' => array(
                'callback' => 'clear_number'
            ),
            'CPF_CNPJ' => array(
                'callback' => 'clear_number'
            )
        );

        $data = $this->prepare_put_array($put_array);
        $is_save = $this->user_manager->update($data, $id);

        if ($data) {
            if ($is_save) {
                $this->response($data, 200);
                return;
            }
            $this->response(array(
                'id' => $this->put('id'),
                'data' => $data,
                'message' => Utils::message('update_fail' . $this->user_manager->get_errors())
                    ), 400);
            return;
        }
        $this->response(null, 200);
    }

    function users_change_status_put() {

        $active = $this->put('status');
        $id = $this->put('id');
        $udp = $this->Users_M->save(array(
            'ACTIVE' => $active,
            'GROUP_ID' => $active == 1 ? 4 : 1
                ), $id);

        if ($active == 1):
            $this->load->library('tpl_mail_send');
            $data = $this->Users_M->all_info($id);
            $_mail = $this->tpl_mail_send;

            $_mail->data($data);
            $_mail->to($data->EMAIL);
            $_mail->subject('Ativação');
            $_mail->send('cadastro', 'cadastro_aprovado');

        endif;

        if ($udp) {

            $this->response($udp, 200);
        }

        $this->response(array(
            'message' => ''
                ), 400);
    }

    function groups_get() {
        $this->response($this->user_manager->get_groups(), 200);
    }

    function users_delete($id) {
        $delete = $this->user_manager->unregister($id);
        if ($delete) {
            $this->response(null, 200);
        }
        $this->response(array(
            'message' => Utils::message('delete_fail')
                ), 400);
    }

    function condicoesVenda_get($id = null) {
        $this->db->where(array('DELETED' => 'N'));
        $data = $this->Condicoes_Vendas_M->get($id);
        if ($data) {
            if (!is_null($id)) {
                $data = array(
                    $data
                );
            }
            echo json_encode($data);
            return;
        }
        $this->response(null, 200);
    }

    function condicoesVenda_post() {
        $data_prepare = $this->prepare_post_array(array(
            'TITLE',
            'CONDICAO_PAGAMENTO'
        ));
        $data = $this->Condicoes_Vendas_M->save($data_prepare);
        if ($data) {
            $this->response($data, 200);
        }
        $this->response(array(
            'message' => Utils::message('save_fail') . $this->Condicoes_Vendas_M->get_log_errors(null, true)
                ), 400);
    }

    function condicoesVenda_put($id) {
        $data_prepare = $this->prepare_put_array(array(
            'TITLE',
            'CONDICAO_PAGAMENTO'
        ));
        $data = $this->Condicoes_Vendas_M->save($data_prepare, $id);
        if ($data) {
            $this->response($data, 200);
        }
        $this->response(array(
            'message' => Utils::message('update_fail') . $this->Condicoes_Vendas_M->get_log_errors(null, true)
                ), 400);
    }

    function condicoesVenda_delete($id) {
        $data = $this->Condicoes_Vendas_M->save(array('DELETED' => 'S'), $id);
        if ($data) {
            $this->response(array(
                'message' => Utils::message('delete_success')
                    ), 200);
        }
        $this->response(array(
            'message' => Utils::message('delete_fail') . $this->Condicoes_Vendas_M->get_log_errors(null, true)
                ), 400);
    }

    /*
     * Boletos Bancarios List
     */

    function boletos_get($id = null) {
        $d = $this->Boletos_M->get($id);

        if ($d) {

            if (!is_null($id)) {
                $this->response(array(
                    $d
                        ), 200);
                return;
            }

            $this->response($d, 200);
            return;
        }

        $this->response(array(), 200);
    }

    function boletos_post() {
        $post_data = $this->prepare_post_array(array(
            'CONTA_ID',
            'CARTEIRA',
            'CIDADE',
            'INSTRUCAO_1',
            'INSTRUCAO_2',
            'INSTRUCAO_3',
            'DEMONSTRATIVO_1',
            'DEMONSTRATIVO_2',
            'DEMONSTRATIVO_3',
            'LOGRADOURO',
            'RAZAO',
            'PRAZO',
            'TAXA',
            'UF',
            'CNPJ' => array(
                'callback' => 'clear_number'
            )
        ));

        $d = $this->Boletos_M->save($post_data);
        if ($d) {
            $this->response(array(
                'message' => Utils::message('save_success')
                    ), 200);
            return;
        }
        $this->response(array(
            'message' => Utils::message('save_fail') . $this->Boletos_M->get_log_errors()
                ), 400);
    }

    function boletos_put($id) {
        $put_data = $this->prepare_put_array(array(
            'CONTA_ID',
            'CARTEIRA',
            'CIDADE',
            'INSTRUCAO_1',
            'INSTRUCAO_2',
            'INSTRUCAO_3',
            'DEMONSTRATIVO_1',
            'DEMONSTRATIVO_2',
            'DEMONSTRATIVO_3',
            'LOGRADOURO',
            'RAZAO',
            'PRAZO',
            'TAXA',
            'UF',
            'CNPJ' => array(
                'callback' => 'clear_number'
            )
        ));
        $d = $this->Boletos_M->save($put_data, $id);
        if ($d) {
            $this->response(array(
                'message' => Utils::message('update_success')
                    ), 200);
            return;
        }
        $this->response(array(
            'message' => Utils::message('update_fail') . $this->Boletos_M->get_log_errors()
                ), 400);
    }

    function boletos_delete($id) {
        $d = $this->Boletos_M->delete($id);
        if ($d) {
            $this->response(array(
                'message' => Utils::message('delete_success')
                    ), 200);
            return;
        }
        $this->response(array(
            'message' => Utils::message('delete_fail') . $this->Boletos_M->get_log_errors()
                ), 400);
    }

    function bancos_get($id = null) {
        $d = $this->Bancos_M->get($id);

        if ($d) {

            if (!is_null($id)) {
                $this->response(array(
                    $d
                        ), 200);
                return;
            }
            $this->response($d, 200);
            return;
        }

        $this->response(array(), 200);
    }

    function bancos_post() {
        $post_data = $this->prepare_post_array(array(
            'NOME_BANCO',
            'GERENTE',
            'COD_BANCO',
            'TELEFONE' => array(
                'callback' => 'clear_number'
            )
        ));
        $d = $this->Bancos_M->save($post_data);
        if ($d) {
            $this->response(array(
                'message' => Utils::message('save_success')
                    ), 200);
            return;
        }
        $this->response(array(
            'message' => Utils::message('save_fail') . $this->Bancos_M->get_log_errors()
                ), 400);
    }

    function bancos_put($id) {
        $put_data = $this->prepare_put_array(array(
            'NOME_BANCO',
            'GERENTE',
            'COD_BANCO',
            'TELEFONE' => array(
                'callback' => 'clear_number'
            )
        ));
        $d = $this->Bancos_M->save($put_data, $id);
        if ($d) {
            $this->response(array(
                'message' => Utils::message('update_success')
                    ), 200);
            return;
        }
        $this->response(array(
            'message' => Utils::message('update_fail') . $this->Bancos_M->get_log_errors()
                ), 400);
    }

    function bancos_delete($id) {
        $d = $this->Bancos_M->delete($id);
        if ($d) {
            $this->response(array(
                'message' => Utils::message('delete_success')
                    ), 200);
            return;
        }
        $this->response(array(
            'message' => Utils::message('delete_fail') . $this->Bancos_M->get_log_errors()
                ), 400);
    }

    function contas_get($id = null) {

        $d = $this->Contas_M->get($id);

        if ($d) {

            if (!is_null($id)) {
                $this->response(array($d), 200);
            }
            $this->response($d, 200);
        }

        $this->response(array(), 200);
    }

    function contas_post() {
        $post_data = $this->prepare_post_array(array(
            'BANCO_ID',
            'CONTA' => array(
                'callback' => 'clear_number'
            ),
            'CONTA_DIGITO',
            'AGENCIA',
            'AGENCIA_DIGITO',
            'TITULAR',
            'ADMINISTRADOR'
        ));

        if ($this->Contas_M->get_by(array(
                    'AGENCIA_DIGITO' => $post_data ['AGENCIA_DIGITO'],
                    'AGENCIA' => $post_data ['AGENCIA'],
                    'CONTA' => $post_data ['CONTA'],
                    'CONTA_DIGITO' => $post_data ['CONTA_DIGITO']
                ))) {
            $this->response(array(
                'message' => Utils::message('is_duplicate_data')
                    ), 400);
            return;
        }

        $d = $this->Contas_M->save($post_data);
        if ($d) {
            $this->response(array(
                'message' => Utils::message('save_success')
                    ), 200);
            return;
        }
        $this->response(array(
            'message' => Utils::message('save_fail') . $this->Contas_M->get_log_errors()
                ), 400);
    }

    function contas_put($id) {
        $put_data = $this->prepare_put_array(array(
            'BANCO_ID',
            'CONTA' => array(
                'callback' => 'clear_number'
            ),
            'CONTA_DIGITO',
            'AGENCIA',
            'AGENCIA_DIGITO',
            'TITULAR',
            'ADMINISTRADOR'
        ));
        $d = $this->Contas_M->save($put_data, $id);
        if ($d) {
            $this->response(array(
                'message' => Utils::message('update_success')
                    ), 200);
            return;
        }
        $this->response(array(
            'message' => Utils::message('update_fail') . $this->Contas_M->get_log_errors()
                ), 400);
    }

    function contas_delete($id) {
        $d = $this->Contas_M->delete($id);
        if ($d) {
            $this->response(array(
                'message' => Utils::message('delete_success')
                    ), 200);
            return;
        }
        $this->response(array(
            'message' => Utils::message('delete_fail') . $this->Contas_M->get_log_errors()
                ), 400);
    }

    function preview_system_get() {
        $this->response(array(
            'num_leiloes' => $this->Leilao_Model->count(),
            'leiloes_opened' => $this->Leilao_Model->count('STATUS < 4'),
            'num_users' => $this->Users_M->count(),
            'num_lances' => $this->Lances_M->count(),
            'users_online' => $this->_users_online(),
            'lotes_vendidos' => $this->Lances_Arrematados_M->count(array(
                'USER_ID <> ' => 1
            ))
                )
                , 200);
    }

    function leilaoAllStatistics_get() {

        $this->response(array(
            'num_closed' => $this->Leilao_Model->count('STATUS = 4'),
            'num_loteando' => $this->Leilao_Model->count('STATUS = 3'),
            'num_lance' => $this->Leilao_Model->count('STATUS <= 2')
        ));
    }

    function accountability_get() {
        $this->response(array(
            'num_leiloes' => $this->Leilao_Model->count(array(
                'STATUS' => 4,
                'PRESTACAO_CONTAS' => 'N'
            ))
                ), 200);
    }

    function habilitados_get($id) {

        $this->db->select('us.LOGIN,pf.*');

        $this->db->join('users as us', 'us.ID=hb.USER_ID')
                ->join('profiles as pf', 'us.ID=pf.USER_ID')
                ->from('habilitacoes as hb')
                ->where(array('hb.LEILAO_ID' => $id));

        $this->response(array('data' => $this->db->get()->result()), 200);
    }

    /*
     * clousingAuctions Recuperado leiloes finalizados e sem prestação de contas
     */

    function clousingAuctions_get() {
        $this->response($this->Leilao_Model->get_all_close(), 200);
    }

    /*
     * clousingAuctionsOnDown
     * 
     * Recupera todos os leilões que foram baixados para leilão 
     */

    function clousingAuctionsOnDown_get() {
        $this->response($this->Leilao_Model->get_all_close('S'), 200);
    }

    function clousingAuctionsPreview_get($id) {
        // header('content-type:text/json;');
        header('Content-Type: application/json');
        $d = $this->Leilao_Model->get_info_close($id);
        echo json_encode($d);
    }

    function newsletterEmails_get($id = null) {
        $this->response($this->Newsletter_M->get($id));
    }

    function messages_leiloes_get() {
        $d = $this->Leilao_Model->get_messages_lotes();

        $data = array();

        if (count($d) > 0) {
            foreach ($d as $row) {
                $s_array = array('{cod_lote}', '{cod_leilao}');
                $r_array = array($row->ID, $row->COD_LEILAO);

                $data[] = array('load' => false, 'url' => '#/leilao/' . $row->COD_LEILAO . '/lotesClosed', 'message' => str_replace($s_array, $r_array, Utils::message('lote_conditional')));
            }
        }

        $this->response($data, 200);
    }

    function payment_put($id) {

        $u = $this->Pagamentos_M->save($this->prepare_put_array(array('NUM_DOC', 'CONFIRMADO')), $id);

        if ($u) {
            $this->response(array('message' => Utils::message('update_success')), 200);
        }

        $this->response(array('message' => Utils::message('update_fail')), 400);
    }

    function payment_post() {

        $u = $this->Pagamentos_M->save($this->prepare_put_array(array('NUM_DOC')));

        if ($u) {
            $this->response(array('message' => Utils::message('save_success')), 200);
        }

        $this->response(array('message' => Utils::message('save_fail')), 400);
    }

    function taxas_get($id = null) {

        $s = $this->Taxas_M->get($id);

        if (!is_null($id)) {
            $this->response(array($s), 200);
            return;
        }

        if ($s) {
            $this->response($s, 200);
            return;
        }

        $this->response(array(), 200);
    }

    function taxas_put($id = null) {

        $data = $this->prepare_put_array(array('MINIMO' => array('callback' => 'money_db'),
            'MAXIMO' => array('callback' => 'money_db'),
            'TAXA' => array('callback' => 'money_db')
        ));

        $s = $this->Taxas_M->save($data, $id);

        if ($s) {
            $this->response(array('message' => Utils::message('update_success')), 200);
            return;
        }
        $this->response(array('message' => Utils::message('update_fail')), 400);
    }

    function taxas_post() {

        $data = $this->prepare_post_array(array(
            'MINIMO' => array('callback' => 'money_db'),
            'MAXIMO' => array('callback' => 'money_db'),
            'TAXA' => array('callback' => 'money_db')
        ));

        $s = $this->Taxas_M->save($data);

        if ($s) {
            $this->response(array('message' => Utils::message('save_success')), 200);
            return;
        }
        $this->response(array('message' => Utils::message('save_fail')), 400);
    }

    function taxas_delete($id) {

        $delete = $this->Taxas_M->delete($id);
        if ($delete) {
            $this->response(array('message' => Utils::message('delete_success')), 200);
            return;
        }
        $this->response(array('message' => Utils::message('delete_fail')), 400);
    }

    function leiloeiros_get($id = null) {
        $data = array();
        $rs = $this->Leiloeiros_M->info($id);
        if ($rs):
            $data = $rs;
        endif;
        $this->response($data);
    }

    function leiloeiros_post() {
        $has_data = array('CIDADE' => $this->post('CIDADE'),
            'UF' => strtoupper($this->post('UF')),
            'NOME' => strtoupper($this->post('NOME')),
            'SOBRENOME' => strtoupper($this->post('SOBRENOME')),
            'REGISTRO' => $this->post('REGISTRO'),
            'CONTA_ID' => $this->post('CONTA_ID'),
            'LOGRADOURO' => strtoupper($this->post('LOGRADOURO')),
            'COMPLEMENTO' => strtoupper($this->post('COMPLEMENTO')),
            'NUMERO' => $this->post('NUMERO'),
            'CEP' => $this->post('CEP'),
            'BAIRRO' => strtoupper($this->post('BAIRRO')),
            'CPF' => $this->post('CPF'),
            'IS_DEFAULT' => $this->post('IS_DEFAULT')
        );

        $has_save = $this->Leiloeiros_M->save($has_data);
        if ($has_save):
            $this->response(array('message' => lang_system('save_success')));
        endif;
        $this->response(array('message' => lang_system('save_fail')), 400);
    }

    function leiloeiros_put() {
        $id = $this->put('ID');
        $has_data = array('CIDADE' => strtoupper($this->put('CIDADE')),
            'UF' => strtoupper($this->put('UF')),
            'NOME' => strtoupper($this->put('NOME')),
            'SOBRENOME' => strtoupper($this->put('SOBRENOME')),
            'REGISTRO' => $this->put('REGISTRO'),
            'CONTA_ID' => $this->put('CONTA_ID'),
            'LOGRADOURO' => strtoupper($this->put('LOGRADOURO')),
            'COMPLEMENTO' => $this->put('COMPLEMENTO') === false ? '' : $this->put('COMPLEMENTO'),
            'NUMERO' => $this->put('NUMERO'),
            'CEP' => $this->put('CEP'),
            'BAIRRO' => strtoupper($this->put('BAIRRO')),
            'CPF' => $this->put('CPF'),
            'IS_DEFAULT' => $this->put('IS_DEFAULT')
        );

        $has_save = $this->Leiloeiros_M->save($has_data, $id);
        if ($has_save):
            $this->response(array('message' => lang_system('update_success')));
        endif;
        $this->response(array('message' => lang_system('update_fail')), 400);
    }

    function leiloeiros_delete($id) {

        $has_delete = $this->Leiloeiros_M->delete($id);
        if ($has_delete):
            $this->response(array('message' => lang_system('delete_success')));
        endif;
        $this->response(array('message' => lang_system('delete_fail')), 400);
    }

    /*
     * Upload save
     */

    private function save_upload($_config = array()) {
        
        $config ['upload_path'] = str_replace('system', '', BASEPATH) . 'public/images/' . $this->folder_img;
        $config ['allowed_types'] = 'gif|jpg|png|JPG|GIF|PNG';
        $config ['max_size'] = 1024 * 2;
        $config ['encrypt_name'] = TRUE;
        $config['overwrite'] = FALSE;
        $config['image_watermark'] = $this->watermark;
        //$this->load->library('upload', $config);

        $this->load->library('image_work');

        $config = array_merge($config, $_config);
        $config['upload_archive'] = 'uploadFile';
        $this->image_work->initialize($config);
        $this->image_work->run();
        $data = array();
        $data ['error'] = false;
        if ($this->image_work->get_errors()):
            $data ['error'] = true;
            $data ['message'] = $this->image_work->get_errors();
        else:
            $d = $this->image_work->data();
            $data ['files'] ['name'] = $d ['raw_name'] . $d ['file_ext'];
            $data ['files'] ['size'] = $d ['file_size'];
        endif;

        return $data;
    }

    function remove_file_upload($file) {
        $this->load->library('image_work');
        $file = str_replace('system/', '', BASEPATH) . $this->path_images . $file;
        return $this->image_work->delete($file);
    }

    function prepare_post_array($_array = array()) {
        if (is_array($_array)) {
            $data = array();
            foreach ($_array as $key => $row) :
                $data [$key] = $this->post($key);
                if (is_int($key)) {
                    unset($data [$key]);
                    $data [$row] = $this->post($row) ? $this->post($row) : '';
                }
                if (isset($row ['callback']) && is_array($row)) :
                    $params = $data [$key];
                    if (isset($row ['params'])) {
                        $params = $row ['params'];
                    }
                    $data [$key] = call_user_func($row ['callback'], $params);


                endif;
            endforeach
            ;
            return $data;
        }
        return false;
    }

    function prepare_put_array($_array = array()) {
        if (is_array($_array)) {
            $data = array();
            foreach ($_array as $key => $row) :
                if ($this->put($key) !== FALSE) {
                    $data [$key] = $this->put($key);
                }
                if (is_int($key) && $this->put($row)) {
                    unset($data [$key]);
                    $data [$row] = $this->put($row) ? $this->put($row) : '';
                }
                if (isset($row ['callback']) && is_array($row)) :
                    $params = $data [$key];
                    if (isset($row ['params'])) {
                        $params = $row ['params'];
                    }
                    $data [$key] = call_user_func($row ['callback'], $params);


                endif;
            endforeach;
            return $data;
        }
        return false;
    }

    function response($data, $cod = 200) {
        //header('HTTP/1.0 '.get_code_response($cod));
        set_status_header($cod);
        header('content-type:application/json;');
        echo json_encode($data);
        exit;
    }

}
